#include "mtlib.c"
#include <stdio.h>

void enviar1(void);
void enviar2(void);
void recibir1(void);
void recibir2(void);

unsigned char centro1, centro2;
unsigned int conexion1, conexion2;

int main(void) {
  mti_mensaje mensaje;
  centro1 = mtf_obtener_descriptor(1024);
  centro2 = mtf_obtener_descriptor(1024);
  conexion1 = mtf_conectar(centro1, MTP_INTERNO, centro2);
  mtf_recibir_mensajes(centro2);
  mensaje = mtf_siguiente_mensaje(centro2);
  conexion2 = mensaje.remitente;
  mtf_descartar_mensaje(centro2, mensaje.codigo);
  enviar1();
  recibir1();
  enviar2();
  recibir2();
  return 0;
}

void enviar1 (void) {
  char datos[512];
  int posicion;
  for (posicion = 0; posicion < 512; posicion ++)
    datos[posicion] = 48 + posicion % 10;
  mtf_enviar_mensaje(centro1, conexion1, MTE_ESCRIBIR_SECTOR, (long) 1234567, (void *) datos);
}

void recibir1 (void) {
  char * datos;
  int posicion;
  unsigned long numeroSector;
  mti_mensaje mensaje;
  datos = malloc(512);
  while (!mtf_recibir_mensajes(centro2));
  mensaje = mtf_siguiente_mensaje(centro2);
  mtf_obtener_datos(centro2, mensaje.codigo, (long *) &numeroSector, (void **) &datos);
  printf("Mensaje escribir sector: número %u, 20 bytes: %20.20s\n", numeroSector, datos);
  printf("(código %u, remitente %u, categoría %hu, tipo %hu)\n", mensaje.codigo, mensaje.remitente, mensaje.categoria, mensaje.tipo);
  mtf_descartar_mensaje(centro2, mensaje.codigo);
}

void enviar2 (void) {
  char nombre[30];
  *nombre = 0;
  strcpy(nombre, "Contenido de prueba");
  mtf_enviar_mensaje(centro2, conexion2, MTQ_LECTURA_EN_DISCO, (char *) nombre);
}

void recibir2 (void) {
  char * nombre;
  mti_mensaje mensaje;
  while(!mtf_recibir_mensajes(centro1));
  mensaje = mtf_siguiente_mensaje(centro1);
  nombre = NULL;
  mtf_obtener_datos(centro1, mensaje.codigo, (char **) &nombre);
  printf("Mensaje de escritura en disco: %s\n", nombre);
  printf("(código %u, remitente %u, categoría %hu, tipo %hu)\n", mensaje.codigo, mensaje.remitente, mensaje.categoria, mensaje.tipo);
  free(nombre);
  mtf_descartar_mensaje(centro1, mensaje.codigo);
}